#ifndef CUSTOMER_H
#define CUSTOMER_H

#include <string>

namespace MiniBanking
{

    /**
     * @brief Represents a customer of the bank.
     *
     * Each customer has a name and is associated with a savings and a checking account,
     * identified by their account IDs.
     */
    class Customer
    {
    private:
        std::string name_;
        std::string savingsAccountID_;
        std::string checkingAccountID_;

    public:
        /**
         * @brief Constructs a new Customer object.
         * @param name The name of the customer.
         */
        explicit Customer(const std::string &name);

        // Default copy constructor and assignment operator are sufficient for now
        Customer() = default; // 默认构造函数
        Customer(const Customer &) = default;
        Customer &operator=(const Customer &) = default;
        // Default move constructor and assignment operator
        Customer(Customer &&) = default;
        Customer &operator=(Customer &&) = default;
        // Virtual destructor (good practice if Customer were ever inherited from)
        virtual ~Customer() = default;

        /**
         * @brief Gets the name of the customer.
         * @return The customer's name.
         */
        const std::string &getName() const;

        /**
         * @brief Gets the account ID of the customer's savings account.
         * @return The savings account ID string.
         */
        const std::string &getSavingsAccountID() const;

        /**
         * @brief Gets the account ID of the customer's checking account.
         * @return The checking account ID string.
         */
        const std::string &getCheckingAccountID() const;

        /**
         * @brief Sets the account ID for the customer's savings account.
         * @param id The savings account ID to set.
         */
        void setSavingsAccountID(const std::string &id);

        /**
         * @brief Sets the account ID for the customer's checking account.
         * @param id The checking account ID to set.
         */
        void setCheckingAccountID(const std::string &id);
    };

}

#endif
